package cn.com.huzo.repository.manufacture;

import cn.com.huzo.model.entities.manufacture.CommissionProcessingContractHeaderEntity;
import huzofw.repository.GenericRepository;

/**
 * 加工承揽合同数据访问对象接口。
 *
 * @author 吴旭
 */
public interface CommissionProcessingContractHeaderRepository extends GenericRepository<CommissionProcessingContractHeaderEntity, Long> {

    /**
     * 得到新的委托加工合同号（根据规则自动生成）
     * <p>
     * @return
     */
    String fetchNewBillNo();

    /**
     * 根据给定的标识，取得加工合同。
     *
     * @param headerId 加工合同标识
     * @param currentUserId 当前用户
     * @param workFlowId 加工合同审核工作流标识
     * @return
     */
    CommissionProcessingContractHeaderEntity fetchByKey(Long headerId, Long currentUserId, Long workFlowId);

    /**
     * 返回该加工合同的加工金额
     *
     * @param headerId 加工合同标识
     * @return
     */
    Double fetchAmountByKey(Long headerId);

    /**
     * 更新加工承揽合同总金额。
     *
     * @param headerId 加工承揽合同ID
     * @param updatedBy 更新者
     * @return 影响的行数
     */
    Integer updateAmount(Long headerId, Long updatedBy);

    /**
     * 审核加工承揽合同
     *
     * @param headerId 加工承揽合同标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return
     */
    Integer doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode);

    /**
     * 反审加工承揽合同
     *
     * @param headerId 加工承揽合同标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return
     */
    Integer doUnCheck(Long headerId, Short nodeOrder, Long checkedBy);
}
